/*
 *  Copyright (C) 2010 Fabien Renaud
 * 
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 * 
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 * 
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.boc.botv.dao;

import com.boc.botv.model.BankTransaction;
import java.util.List;
import org.hibernate.Session;

/**
 * Gestionnaires de toutes les transactions bancaires
 * @author jp
 */
public interface BankTransactionDao {
  /**
   * Obtient toutes les transactions présentes en base de données.
   * @return Toutes les transactions présentes en base de données.
   */
  public List<BankTransaction> getBankTransactions();

  /**
   * Obtient toutes les transactions bancaires pour un meme utilisateur.
   * @param userId l'identifiant de l'utilisateur
   * @return toutes les transactions de l'utilisateur
   */
  public List<BankTransaction> getBankTransactions(int userId);

  /**
   * Retourne l'ensemble des transactions bancaires d'un utilisateur qui ont été approuvées
   * @param userId l'identifiant de l'utilisateur
   * @return l'ensemble de ses transactions bancaires approuvées
   */
  public List<BankTransaction> getApprovedBankTransactions(int userId);

  /**
   * Retourne l'ensemble des transactions bancaires d'un utilisateur qui n'ont pas été approuvées
   * @param userId l'identifiant de l'utilisateur
   * @return l'ensemble de ses transactions bancaires non approuvées
   */
  public List<BankTransaction> getUnapprovedBankTransactions(int userId);

  /**
   * Ajoute une nouvelle transaction bancaire dans la base de données.
   * @param bankTransaction la transaction à ajouter 
   */
  public void saveBankTransaction(BankTransaction bankTransaction);

  /**
   * Efface une transaction bancaire dans la base de données.
   * @param bankTransaction la transaction à supprimer
   */
  public void deleteBankTransaction(BankTransaction bankTransaction);

  /**
   * Permet d'approuver une transaction bancaire
   * @param transaction la transaction à approuver
   */
  public void updateBankTransaction(BankTransaction transaction);

  /**
   * Récupère une transaction en fonction de son id
   * @param id
   * @return
   */
  public BankTransaction getBankTransaction(int id);

}
